//
// Created by 张珺超 on 2019/10/17.
//

#include "string_tools.h"
#include <cstring>
#include "logicpool.h"

WARLOCK_NS_BEGIN

namespace string_tools {
std::vector<std::string> split(
  const std::string& str, const std::string& sep) {
  std::vector<std::string> result;
  if (str.empty())
    return result;
  //把字符串拷贝成array
  char* str_s = new char[str.length() + 1];
  strcpy(str_s, str.c_str());

  char* sep_s = new char[sep.length() + 1];
  strcpy(sep_s, sep.c_str());

  char* p = strtok(str_s, sep_s);
  while (p) {
    std::string s(p);
    result.push_back(s);
    p = strtok(nullptr, sep_s);
  }
  return result;
}

bool isCJK(const wchar_t& c, bool contains_marks) {
  std::vector<std::pair<wchar_t, wchar_t>> normal_checks {
    { 0x3040, 0x309F },   //	平假名
    { 0x30A0, 0x30FF },   //	片假名
    { 0x3100, 0x312F },   //	汉语拼音字母
    { 0x3130, 0x318F },   //	谚文相容字母
    { 0x31A0, 0x31BF },   //	汉语拼音字母扩展集
    { 0x31C0, 0x31EF },   //	中日韩汉字笔画
    { 0x31F0, 0x31FF },   //	片假名音标扩展集
    { 0x3400, 0x4DBF },   //	中日韩统一汉字扩展集 A
    { 0x4E00, 0x9FBF },   //	中日韩统一汉字
    { 0xF900, 0xFAFF },   //	中日韩相容汉字
    { 0x20000, 0x2A6DF }, //	中日韩统一汉字扩展集 B
    { 0x2F800, 0x2FA1F }, //	增补中日韩相容汉字
    { 0x3300, 0x33FF },   //	中日韩相容符号
    { 0x4DC0, 0x4DFF },   //	《易经》六爻符号
    { 0x2E80, 0x2EFF },   //	增补中日韩汉字部首
    { 0x2F00, 0x2FDF },   //	康熙部首
  };

  std::vector<std::pair<wchar_t, wchar_t>> mark_checks {
    { 0x3190, 0x319F }, //	汉字注释标记
    { 0xAC00, 0xD7AF }, //	谚文音节字符
    { 0x3000, 0x303F }, //	中日韩标点符号
    { 0x3200, 0x32FF }, //	带圈中日韩相容表音文字字母和月份符号
  };

  for (const auto& range : normal_checks)
    if (range.first <= c && c <= range.second)
      return true;

  if (contains_marks)
    for (const auto& r : mark_checks)
      if (r.first <= c && c <= r.second)
        return true;

  return false;
}

} // namespace string_tools

WARLOCK_NS_END
